package com.songlanyun.modules.singlegoods.service.impl;

import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.songlanyun.common.utils.DateUtils;
import com.songlanyun.common.utils.PageUtils;
import com.songlanyun.common.utils.Query;
import com.songlanyun.modules.singlegoods.dao.ProductSingleGoodsStockRecordDao;
import com.songlanyun.modules.singlegoods.entity.ProductSingleGoodsStockRecordEntity;
import com.songlanyun.modules.singlegoods.service.ProductSingleGoodsService;
import com.songlanyun.modules.singlegoods.service.ProductSingleGoodsStockRecordService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * 单品的库存变动记录表
 */
@Service("productSingleGoodsStockRecordService")
public class ProductSingleGoodsStockRecordServiceImpl extends ServiceImpl<ProductSingleGoodsStockRecordDao, ProductSingleGoodsStockRecordEntity> implements ProductSingleGoodsStockRecordService {


    /**
     * 创建单品的库存变动记录表
     * @param entity
     * @return
     */
    @Override
    public ProductSingleGoodsStockRecordEntity create(ProductSingleGoodsStockRecordEntity entity) {

        this.baseMapper.insert(entity);
        return entity;
    }


    /**
     * 单品的库存变动记录表无需修改
     * @param entity
     * @return
     */
    @Override
    public ProductSingleGoodsStockRecordEntity modify(ProductSingleGoodsStockRecordEntity entity) {
       return null;
    }

    /**
     * 单品的库存变动记录表无需删除
     * @param id
     */
    @Override
    public void remove(Long id) {

    }

    /**
     * 分页查询单品出库入库明细
     * params参数说明
     * shop_id 商家店铺id必给
     * single_goods_id 单品id(可以从单品列表点过来，查看某个单品下的明细)（可以不给）
     * single_goods_code 单品编码（可以不给，如果给了不要和single_goods_id同时使用）
     * single_goods_title 单品标题（可以不给，如果给了不要和single_goods_id同时使用）
     * stock_change_mode 出入库类型（可以不给，0代表是入库，1是出库）
     * in_stock_type 入库类型（可以不给，如果stock_change_mode=0，则in_stock_type有效，应给的类型值可以见inStockType枚举）
     * out_stock_type 出库类型（可以不给，如果stock_change_mode=1，则out_stock_type有效，应给的类型值可以见OuterStockType枚举）
     * start_time 开始时间（可以不给，给了格式为yyyy-MM-dd HH:mm:ss）
     * end_time 结束时间（可以不给，给了格式为yyyy-MM-dd HH:mm:ss）
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        /**
         * 一定要有shop_id
         */
        Long shopId= Long.valueOf(params.getOrDefault("shop_id",0).toString());
        QueryWrapper<ProductSingleGoodsStockRecordEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("shop_id",shopId);

        Long singleGoodsId= Long.valueOf(params.getOrDefault("single_goods_id",0).toString());
        if(singleGoodsId>0) {
            queryWrapper.eq("single_goods_id",singleGoodsId);
        }

        String singleGoodsCode = params.getOrDefault("single_goods_code","").toString();
        if(StringUtils.isNotBlank(singleGoodsCode))
        {
            queryWrapper.like("single_goods_code",singleGoodsCode);
        }

        String singleGoodsTitle = params.getOrDefault("single_goods_title","").toString();
        if(StringUtils.isNotBlank(singleGoodsTitle))
        {
            queryWrapper.like("single_goods_title",singleGoodsTitle);
        }

        if(params.containsKey("stock_change_mode"))
        {
            Integer stockChangeMode = MapUtil.getInt(params, "stock_change_mode");
//            int stockChangeMode= Integer.valueOf(params.getOrDefault("stock_change_mode",-1).toString());
            if(stockChangeMode!=null)
            {
                queryWrapper.eq("stock_change_mode",stockChangeMode);
                if(stockChangeMode==0)
                {
                    Integer inStockType = MapUtil.getInt(params, "in_stock_type");
                    if(inStockType != null && inStockType>0)
                    {
                        queryWrapper.eq("in_stock_type",inStockType);
                    }

                }
                else
                {
                    Integer outStockType = MapUtil.getInt(params, "out_stock_type");
                    if(outStockType != null && outStockType>0)
                    {
                        queryWrapper.eq("out_stock_type",outStockType);
                    }

                }
            }
        }

        if(params.containsKey("start_time"))
        {
            String startTime = params.get("start_time").toString();
            queryWrapper.ge("create_time",startTime);
        }

        if(params.containsKey("end_time"))
        {
            String endTime = params.get("end_time").toString();
            queryWrapper.le("create_time",endTime);
        }

        queryWrapper.orderByDesc("create_time");

        IPage<ProductSingleGoodsStockRecordEntity> page = this.page(
                new Query<ProductSingleGoodsStockRecordEntity>().getPage(params),
                queryWrapper
        );

        return new PageUtils(page);
    }



}